package 链表;

/**
 * @Author Weton Li
 * @Date 2021/3/14 16:16
 */
public class 二_合并两个有序链表 {

    public static ListNode mergeTwoSortList(ListNode lp1,ListNode lp2){

        ListNode sentinel = new ListNode(-1);

        ListNode prevListNode = sentinel;

        while (lp1 != null && lp2 != null) {

            if (lp1.value <= lp2.value) {
                prevListNode.next = lp1;
                prevListNode = lp1;
                lp1 = lp1.next;
            }else {
                prevListNode.next = lp2;
                prevListNode = lp2;
                lp2 = lp2.next;
            }
        }

        prevListNode.next = (lp1 == null)?lp2:lp1;

        return sentinel.next;

    }

    public static void main(String[] args) {
        ListNode listNode11 = new ListNode(1);
        ListNode listNode12 = new ListNode(2);
        ListNode listNode13 = new ListNode(4);

        ListNode listNode21 = new ListNode(1);
        ListNode listNode22 = new ListNode(3);
        ListNode listNode23 = new ListNode(4);

        listNode11.next=listNode12;
        listNode12.next=listNode13;
        listNode13.next=null;

        listNode21.next=listNode22;
        listNode22.next=listNode23;
        listNode23.next=null;

        printList(listNode11);
        printList(listNode21);

        ListNode headNode = mergeTwoSortList(listNode11, listNode21);


        printList(headNode);

    }

    public static void printList(ListNode head){
        ListNode curr = head;
        while (curr != null) {
            System.out.print(curr.value+"->");
            curr = curr.next;
        }
        System.out.println("null");
    }
}
